﻿function New-ManifestServer
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Folders = @()
                                        Files = @()
                                        Products = @()
                                        WindowsFeatures = @()
                                        WindowsServices = @()
                                        EnvironmentVariables = @()
                                        Registry = @()
                                        Components = @()
                                        Middlewares = @{}
                                        ConfigurationRepositories=@()
                                        ipAddresses=@{}
                                        Groups = @()
                                        }
    }
}


function New-ManifestMiddleware
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Folders = @{}
                                        Products =  @{}
                                        WindowsFeatures = @{}
                                        executionContainers = @{}
                                        runtimes = @{}
                                        }

    }
}


function New-ManifestExecutionContainer
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Folders = @{}
                                        Files = @{}
                                        JavaOptions= @()
                                        siteBindings = @()
                                        EnvironmentVariables = @()
                                        Registry = @()
                                        Components = @()
                                        Dependencies = @{}
                                        }

    }
}


function New-ManifestFolder
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        $folder = New-Object PSObject -Property @{
                                                Rights = @()
                                                }
        
        $folder | Add-Member -MemberType ScriptProperty -Name FullPath -Value {
            Get-FullPath -Object $this
        }

        $folder

    }
}


function New-ManifestFile
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        $file = New-Object PSObject
        
        $file | Add-Member -MemberType ScriptProperty -Name FullPath -Value {
            Get-FullPath -Object $this
        }

        $file

    }
}



function New-ManifestProduct
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Folders = @{}
                                        Dependencies = @{}
                                        }
    }
}


function New-ManifestComponent
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Folders = @{}
                                        Dependencies = @{}
                                        }
    }
}


function New-ManifestDeploymentTarget
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Servers = @{}
                                        }
    }
}


function New-ManifestGroup
{
    [cmdletbinding(DefaultParameterSetName="none")]
    Param( 
    )
    Process
    {
        New-Object PSObject -Property @{
                                        Members = @()
                                        }
    }
}


